// Defines ring types
//--------------------------------
#ifndef RINGDATA_H
#define RINGDATA_H
#include "item.h"

class Ring : public Item, public BIItemSymbol, public BIItemCategory, public BIItemType, public BIItemWeight, public BIOnEquip {
public:
    
    Ring();
    virtual ~Ring() { }

protected:

    virtual bool ItemSymbol( IO::Sym* symbol ) const;
    virtual bool ItemType( uint* type ) const;
    virtual bool ItemWeight( uint* weight ) const;
    virtual bool ItemCategory( uint* category ) const;
    virtual bool OnEaten( Creature* c );
    virtual bool OnEquip( bool wield );

};

class RingStr : public Ring, public BICreateWearBuff {
public:

    RingStr() { }
    virtual ~RingStr() { }

protected:

    virtual bool Name( std::string* name, bool* plural, uint article ) const;
    virtual bool ItemSymbol( IO::Sym* symbol ) const;
    virtual bool CreateWearBuff( CompoundBuff** buff ) const;

};

class RingDex : public Ring, public BICreateWearBuff {
public:

    RingDex() { }
    virtual ~RingDex() { }

protected:

    virtual bool Name( std::string* name, bool* plural, uint article ) const;
    virtual bool ItemSymbol( IO::Sym* symbol ) const;
    virtual bool CreateWearBuff( CompoundBuff** buff ) const;

};

class RingInt : public Ring, public BICreateWearBuff {
public:

    RingInt() { }
    virtual ~RingInt() { }

protected:

    virtual bool Name( std::string* name, bool* plural, uint article ) const;
    virtual bool ItemSymbol( IO::Sym* symbol ) const;
    virtual bool CreateWearBuff( CompoundBuff** buff ) const;

};

#endif
